﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Cotizav.Presentacion.WinForms.Persona.Cliente
{
    public partial class RegistroCliente : Form
    {
        List<Entidades.Contacto> ListaContactos;

        public RegistroCliente()
        {
            InitializeComponent();
            ListaContactos = new List<Entidades.Contacto>();
        }

        private void RegistroCliente_Load(object sender, EventArgs e)
        {
            //cargar sector
            LoadListSector();
            //cargar vendedor
            LoadListVendedor();
            //cargar categoria
            LoadListCategoria();
            //cargar sucursal
            LoadListSucursal();
            //cargar provincia
            LoadListProvincia();
        }

        internal void LoadListVendedor()
        {
            cmbVendedor.DataSource = (new LogicaNegocio.VendedorBLL()).Listar();
            cmbVendedor.DisplayMember = "Nombre";
            cmbVendedor.ValueMember = "IdVendedor";
            cmbVendedor.SelectedIndex = -1;
        }

        internal void LoadListSector()
        {
            cmbSector.DataSource = (new LogicaNegocio.SectorBLL()).Listar();
            cmbSector.DisplayMember = "NombreSector";
            cmbSector.ValueMember = "IdSector";
            cmbSector.SelectedIndex = -1;
        }

        internal void LoadListCategoria()
        {
            cmbCategoria.DataSource = (new LogicaNegocio.CategoriaBLL()).Listar();
            cmbCategoria.DisplayMember = "NombreCategoria";
            cmbCategoria.ValueMember = "IdCategoria";
            cmbCategoria.SelectedIndex = -1;
        }

        internal void LoadListSucursal()
        {
            cmbSucursal.DataSource = (new LogicaNegocio.SucursalBLL()).Listar();
            cmbSucursal.DisplayMember = "NombreSucursal";
            cmbSucursal.ValueMember = "IdSucursal";
            cmbSucursal.SelectedIndex = -1;
        }

        internal void LoadListProvincia()
        {
            cmbProvincia.DataSource = (new LogicaNegocio.ProvinciaBLL()).Listar();
            cmbProvincia.DisplayMember = "NombreProvincia";
            cmbProvincia.ValueMember = "IdProvincia";
            cmbProvincia.SelectedIndex = -1;
        }

        internal void setReadOnlyPanel()
        {
            txtRazonSocial.ResetText(); txtRazonSocial.ReadOnly = true;
            txtDireccion.ResetText(); txtDireccion.ReadOnly = true;
            txtRuc.ResetText(); txtRuc.ReadOnly = true;
            cmbSector.DropDownStyle = ComboBoxStyle.Simple; cmbSector.Enabled = false; cmbSector.SelectedIndex = -1;
            cmbVendedor.DropDownStyle = ComboBoxStyle.Simple; cmbVendedor.Enabled = false; cmbVendedor.SelectedIndex = -1;
            cmbProvincia.DropDownStyle = ComboBoxStyle.Simple; cmbProvincia.Enabled = false; cmbProvincia.SelectedIndex = -1;
            cmbDistrito.DropDownStyle = ComboBoxStyle.Simple; cmbDistrito.Enabled = false; cmbDistrito.SelectedIndex = -1;
            cmbCategoria.DropDownStyle = ComboBoxStyle.Simple; cmbCategoria.Enabled = false; cmbCategoria.SelectedIndex = -1;
            cmbSucursal.DropDownStyle = ComboBoxStyle.Simple; cmbSucursal.Enabled = false; cmbSucursal.SelectedIndex = -1;
            txtEmail.ResetText(); txtEmail.ReadOnly = true;
            txtTelefono.ResetText(); txtTelefono.ReadOnly = true;
            txtFechaRegistro.ResetText(); txtFechaRegistro.ReadOnly = true;

            txtNombreContacto.ResetText(); txtNombreContacto.ReadOnly = true;
            txtTelefonoContacto.ResetText(); txtTelefonoContacto.ReadOnly = true;
            txtCargoContacto.ResetText(); txtCargoContacto.ReadOnly = true;
            txtEmailContacto.ResetText(); txtEmailContacto.ReadOnly = true;
            txtCelularContacto.ResetText(); txtCelularContacto.ReadOnly = true;
            txtRpmContacto.ResetText(); txtRpmContacto.ReadOnly = true;
            txtRPCContacto.ResetText(); txtRPCContacto.ReadOnly = true;
            txtNextelContacto.ResetText(); txtNextelContacto.ReadOnly = true;
            txtFaxContacto.ResetText(); txtFaxContacto.ReadOnly = true;
            btnLimpiar.Enabled = false;

            gridContactos.DataSource = null;
            btnNuevo.Enabled = false;
            btnModificar.Enabled = false;
            btnEliminar.Enabled = false;
        }

        internal void LimpiarFormularioCliente()
        {
            txtRuc.ResetText();
            txtRazonSocial.ResetText();
            txtDireccion.ResetText();
            txtFechaRegistro.ResetText();
            txtEmail.ResetText();
            txtTelefono.ResetText();

            LoadListVendedor();
            LoadListProvincia();
            LoadListSector();
            LoadListCategoria();
            LoadListSucursal();

            cmbDistrito.DataSource = null;

        }

        internal void LimpiarFormularioContacto()
        {
            txtNombreContacto.ResetText();
            txtCargoContacto.ResetText();
            txtCelularContacto.ResetText();
            txtRpmContacto.ResetText();
            txtCelularContacto.ResetText();
            txtNextelContacto.ResetText();
            txtFaxContacto.ResetText();
            txtTelefonoContacto.ResetText();
            txtEmailContacto.ResetText();
            txtRPCContacto.ResetText();
        }

        private void cmbProvincia_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cmbProvincia.SelectedIndex >= 0)
            {
                int idProvincia = Int32.Parse(cmbProvincia.SelectedValue.ToString());

                LogicaNegocio.DistritoBLL distritoBLL = new LogicaNegocio.DistritoBLL();
                cmbDistrito.DataSource = distritoBLL.ListarDistrito(idProvincia);
                cmbDistrito.DisplayMember = "NombreDistrito";
                cmbDistrito.ValueMember = "IdDistrito";
                cmbDistrito.SelectedIndex = -1;
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtNombreContacto.Text))
            {
                if (!string.IsNullOrWhiteSpace(txtTelefonoContacto.Text))
                {
                    Entidades.Contacto newContacto = new Entidades.Contacto()
                    {
                        Nombre = txtNombreContacto.Text.Trim(),
                        Cargo = txtCargoContacto.Text.Trim(),
                        Telefono = txtTelefonoContacto.Text.Trim(),
                        Email = txtEmailContacto.Text.Trim(),
                        Celular = txtCelularContacto.Text.Trim(),
                        Rpm = txtRpmContacto.Text.Trim(),
                        Rpc = txtRPCContacto.Text.Trim(),
                        Nextel = txtNextelContacto.Text.Trim(),
                        Fax = txtFaxContacto.Text.Trim()
                    };

                    ListaContactos.Add(newContacto);

                    gridContactos.DataSource = null;
                    gridContactos.DataSource = ListaContactos;
                    gridContactos.ClearSelection();

                    LimpiarFormularioContacto();
                }
                else
                {
                    MessageBox.Show("Ingrese el teléfono del contacto", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese nombre del contacto", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (gridContactos.SelectedRows.Count > 0)
            {
                int selectedIndex = gridContactos.SelectedRows[0].Index;

                if (ListaContactos[selectedIndex] != null)
                {
                    ListaContactos[selectedIndex].Nombre = txtNombreContacto.Text;
                    ListaContactos[selectedIndex].Cargo = txtCargoContacto.Text;
                    ListaContactos[selectedIndex].Celular = txtCelularContacto.Text;
                    ListaContactos[selectedIndex].Rpm = txtRpmContacto.Text;
                    ListaContactos[selectedIndex].Rpc = txtCelularContacto.Text;
                    ListaContactos[selectedIndex].Nextel = txtNextelContacto.Text;
                    ListaContactos[selectedIndex].Fax = txtFaxContacto.Text;
                    ListaContactos[selectedIndex].Telefono = txtTelefonoContacto.Text;
                    ListaContactos[selectedIndex].Email = txtEmailContacto.Text;
                    ListaContactos[selectedIndex].Rpc = txtRPCContacto.Text;

                    gridContactos.DataSource = null;
                    gridContactos.DataSource = ListaContactos;
                    gridContactos.ClearSelection();

                    LimpiarFormularioContacto();
                }
            }
        }

        private void gridContactos_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (gridContactos.SelectedRows.Count > 0)
            {
                Entidades.Contacto selContacto = gridContactos.SelectedRows[0].DataBoundItem as Entidades.Contacto;

                if (selContacto != null)
                {
                    txtNombreContacto.Text = selContacto.Nombre;
                    txtCargoContacto.Text = selContacto.Cargo;
                    txtCelularContacto.Text = selContacto.Celular;
                    txtRpmContacto.Text = selContacto.Rpm;
                    txtCelularContacto.Text = selContacto.Rpc;
                    txtNextelContacto.Text = selContacto.Nextel;
                    txtFaxContacto.Text = selContacto.Fax;
                    txtTelefonoContacto.Text = selContacto.Telefono;
                    txtEmailContacto.Text = selContacto.Email;
                    txtRPCContacto.Text = selContacto.Rpc;
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridContactos.SelectedRows.Count > 0)
            {
                int selectedIndex = gridContactos.SelectedRows[0].Index;

                if (ListaContactos[selectedIndex] != null)
                {
                    ListaContactos.RemoveAt(selectedIndex);

                    gridContactos.DataSource = null;
                    gridContactos.DataSource = ListaContactos;
                    gridContactos.ClearSelection();

                    LimpiarFormularioContacto();
                }
            }
        }

        private void gridContactos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridContactos.DataSource != null)
            {
                gridContactos.Columns["IdContacto"].Visible = false;
                gridContactos.Columns["IdCliente"].Visible = false;
                gridContactos.Columns["Statusflag"].Visible = false;
                gridContactos.Columns["Activo"].Visible = false;
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.ClienteBLL clienteBLL = new LogicaNegocio.ClienteBLL();

            try
            {
                if (btnGuardar.Tag == null)
                {
                    //insertar
                    Entidades.Cliente nuevoCliente = new Entidades.Cliente()
                    {
                        RucCliente = !string.IsNullOrWhiteSpace(txtRuc.Text) ? txtRuc.Text.Trim() : null,
                        RazonSocial = !string.IsNullOrWhiteSpace(txtRazonSocial.Text) ? txtRazonSocial.Text.Trim() : null,
                        Direccion = !string.IsNullOrWhiteSpace(txtDireccion.Text) ? txtDireccion.Text.Trim() : null,
                        IdVendedor = cmbVendedor.SelectedIndex >= 0 ? int.Parse(cmbVendedor.SelectedValue.ToString()) : new Nullable<int>(),
                        Provincia = cmbProvincia.SelectedIndex >= 0 ? (cmbProvincia.SelectedItem as Entidades.Provincia).NombreProvincia.Trim() : null,
                        IdDistrito = cmbDistrito.SelectedIndex >= 0 ? int.Parse(cmbDistrito.SelectedValue.ToString()) : new Nullable<int>(),
                        IdSector = cmbSector.SelectedIndex >= 0 ? int.Parse(cmbSector.SelectedValue.ToString()) : new Nullable<int>(),
                        IdCategoria = cmbCategoria.SelectedIndex >= 0 ? int.Parse(cmbCategoria.SelectedValue.ToString()) : new Nullable<int>(),
                        IdSucursal = cmbSucursal.SelectedIndex >= 0 ? int.Parse(cmbSucursal.SelectedValue.ToString()) : new Nullable<int>(),
                        Email = !string.IsNullOrWhiteSpace(txtEmail.Text) ? txtEmail.Text.Trim() : null,
                        Telefono = !string.IsNullOrWhiteSpace(txtTelefono.Text) ? txtTelefono.Text.Trim() : null,
                        Activo = 1,
                        FechaRegistro = DateTime.Now,
                        UsuarioRegistro = null,
                        ListContacto = ListaContactos
                    };

                    int resultado = clienteBLL.Guardar(nuevoCliente);

                    if (resultado > 0)
                    {
                        MessageBox.Show("Cliente registrado", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                        LimpiarFormularioCliente();
                        LimpiarFormularioContacto();

                        ListaContactos.Clear();
                        gridContactos.DataSource = null;
                    }
                }
            }
            catch (ApplicationException aex)
            {
                MessageBox.Show(aex.Message, "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            LimpiarFormularioCliente();
            LimpiarFormularioContacto();
        }
    }
}
